package org.nf.db.util.result;

import org.nf.db.util.ResultSetHandler;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * @author wangl
 * @date 2021/7/29
 *
 * 抽象的集合处理器
 */
public abstract class AbstractListHandler<T> implements ResultSetHandler<List<T>> {

    /**
     * 实现接口中的handle方法，在这里遍历集合操作
     */
    @Override
    public List<T> handle(ResultSet rs) throws SQLException {
        //创建一个List集合，用于存放多条记录
        List<T> list = new ArrayList<>();
        while(rs.next()) {
            //调用getRow方法，实际上是调用不同子类的实现方法
            list.add(handleRow(rs));
        }
        return list;
    }

    /**
     * 声明一个获取单条记录抽象方法，由所有的ListHandler子类来做不同的实现
     */
    public abstract T handleRow(ResultSet rs) throws SQLException;
}
